#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>

// mac 60:55:F9:71:9F:00
// 目标设备
uint8_t targetBroad[] = {0x60, 0x55, 0xF9, 0x71, 0x9F, 0x00};
// 目标对象
esp_now_peer_info_t slave;

// 定义 消息类型
typedef enum {
    CAR = 1, ULTRASONIC, MONITOR
} Code;

// 定义动作
typedef enum {
    FRONT = 1, REAR, LEFT, RIGHT
} Action;

// 定义消息结构
typedef struct message {
    Code code;
    Action action;
} Message;

Message message;

// 消息发送回调
void onDataSend(const uint8_t *mac_addr, esp_now_send_status_t sendStatus) {
    if (sendStatus == ESP_NOW_SEND_SUCCESS) {
        Serial.println("Send Message OK");
        return;
    }
    Serial.println("Send Message Error");
}

void setup() {
    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    // 初始化 esp_now
    if (esp_now_init() != 0) {
        Serial.println("ESPNow Init Error！");
        // 重启ESP
        ESP.restart();
    }
    // 注册消息发送回调
    esp_now_register_send_cb(onDataSend);
    // 配对接收端
    memcpy(slave.peer_addr, targetBroad, 6);
    slave.encrypt = false;
    if (esp_now_add_peer(&slave) != ESP_OK) {
        Serial.println("Peer Error");
        return;
    }
    message.code = ULTRASONIC;
    message.action = REAR;
    // 发送消息
    esp_err_t sendResult = esp_now_send(slave.peer_addr, (uint8_t *) &message, sizeof(message));
    if (sendResult != ESP_OK){
        Serial.println("Message Send Error");
    }
    Serial.println("");
    Serial.println("Message: ");
    Serial.print("Code - "); Serial.println(message.code);
    Serial.print("Action - "); Serial.println(message.action);
}

void loop() {

}
